using Lzfy_Refund_Service.Models;

namespace Lzfy_Refund_Service.Services
{
    public interface IRefundService
    {
        Task<RefundResponse?> GetRefundByIdAsync(int id);
        Task<RefundResponse?> GetRefundByRelIdAsync(string relId);
        Task<IEnumerable<RefundResponse>> GetAllRefundsAsync();
        Task<IEnumerable<RefundResponse>> GetRefundsByPatientIdAsync(string patientId);
        Task<IEnumerable<RefundResponse>> GetRefundsByPatientIdAndDateRangeAsync(string patientId, int days);
        Task<RefundQueryResponse> GetRefundsWithFilterAsync(RefundQueryRequest request);
        Task<StatisticsQueryResponse> GetRefundStatisticsAsync(StatisticsQueryRequest request);
        Task<int> CreateRefundAsync(RefundMasterCreateRequest request);
        Task<bool> UpdateRefundAsync(int id, RefundMasterCreateRequest request);
        Task<bool> DeleteRefundAsync(int id);
        Task<RefundResponse?> AuditRefundAsync(int id, RefundMasterUpdateRequest request);
        Task<bool> UpdateHisRefundStatusAsync(int id, string hisRefundStatus);
        Task<PagedResult<RefundResponse>> GetRefundsPagedAsync(int pageNumber, int pageSize, DateTime? startDate, DateTime? endDate, string? auditResult, string? settleStatus = null, string? bankCardHolder = null, string? auditUserName = null);
        Task<BatchSettleResponse> BatchSettleAsync(List<int> refundIds, string operatorName, string operatorFullName);
        Task<IEnumerable<RefundResponse>> GetRefundsByAcctIdAsync(string acctId);
    }
}